import router from './router'
import { useUserStore } from '@/stores/user'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

NProgress.configure({
  easing: 'ease', // 动画方式
  speed: 500, // 递增进度条的速度
  showSpinner: false, // 是否显示加载ico
  trickleSpeed: 200, // 自动递增间隔
  minimum: 0.3 // 初始化时的最小百分比
})

// 解决导航栏重复点击的问题
const originalPush = router.push
router.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

router.beforeEach(async (to, from) => {
  if (to.path !== from.path) {
    NProgress.start()
  }
  const userStore = useUserStore()
  const { isLogin, token } = userStore
  const { redirectAlreadyLogin, title } = to.meta

  document.title = getPageTitle(title as string)

  if (!isLogin) {
    if (token) {
      if (!userStore.hasUserInfo) {
        try {
          await userStore.fetchCurrentUser()
          return to.path
        } catch (error) {
          return '/login'
        }
      } else {
        if (to.path === '/login') {
          return from.path
        }
      }
    } else {
      if (to.matched.some(record => record.meta.requiredLogin)) {
        return '/login'
      }
    }
  } else {
    if (redirectAlreadyLogin) {
      // 已经登录状态下需要重定向首页的页面
      return '/'
    }
    // 如果什么都不返回，则导航是有效的
  }
})

router.afterEach(() => {
  // 在即将进入新的页面组件前，关闭掉进度条
  NProgress.done()
})

const title = '低代码管理系统'

function getPageTitle(pageTitle: string) {
  if (pageTitle) {
    return `${pageTitle} - ${title}`
  }
  return `${title}`
}
